﻿#ifndef QLYDMTX_H
#define QLYDMTX_H
#include "dmtx.h"
#include <QString>
#include <QImage>

class DataMatrixDecoder
{
public:
    struct UserOptions{
       int edgeMin;         /* -e, --minimum-edge, pixel length of smallest expected edge in image */
       int edgeMax;         /* -E, --maximum-edge, pixel length of largest expected edge in image */
       int scanGap;         /* -g, --gap */
       int timeoutMS;       /* -m, --milliseconds, 每幅画的解码时间，超过时间就直接退出 */
       int squareDevn;      /* -q, --square-deviation， allow non-squareness of corners in degrees (0-90) */
       int sizeIdxExpected; /* -s, --symbol-size，DmtxSymbolShapeAuto， DmtxSymbolSquareAuto， DmtxSymbolRectAuto */
       int edgeThresh;      /* -t, --threshold，ignore weak edges below threshold N (1-100) */
       int xMin;          /* -x, --x-range-min 舍弃前面 xMin 列不处理 */
       int xMax;          /* -X, --x-range-max 舍弃 xMax 后的列不处理 */
       int yMin;          /* -y, --y-range-min 舍弃前面 yMin 行不处理 */
       int yMax;          /* -Y, --y-range-max 舍弃 yMax 后的列不处理 */
       int correctionsMax;  /* -C, --corrections-max ，correct at most N errors (0 = correction disabled)*/
       int mosaic;          /* -M, --mosaic ， DmtxTrue， DmtxFalse*/
       int stopAfter;       /* -N, --stop-after, 获得 N 个码后退出 */
       int shrinkMin;       /* -S, --shrink (if range specified), internally shrink image by a factor of N */
       int gs1;             /* -G, --gs1 ，0-255 中间的一个字符，用来作为 FNC1 */
    };
    DataMatrixDecoder();
    void setTimeout(int ms);
    QStringList decodeMulti(QImage &image);
    QString decode(QImage &image);
    static void restoreDefaultOption(UserOptions &opt);
    void setOptions(UserOptions &opt);
    UserOptions options() const;
private:
    DmtxPassFail setDecodeOptions(DmtxDecode *dec, UserOptions &opt);
    DmtxDecode *m_dec = nullptr;
    DmtxImage *m_img = nullptr;
    UserOptions m_opt;
};

#endif // QLYDMTX_H
